** Just like ppmd_point_drawproc() it simply draws the point, but it's done
** inline, and clipping is assumed to be handled at a higher level.
**
** Now, what about clientdata. Well, it's an arbitrary pointer, and can
** mean something different to each different drawproc. For the above two
** drawprocs, clientdata should be a pointer to a pixel holding the color
** to be drawn. Other drawprocs can use it to point to something else,
** e.g. some structure to be modified, or they can ignore it.
*/
/* Outline drawing routines. Lines, splines, circles, etc. */
int ppmd_setlinetype ARGS(( int type ));
#define PPMD_LINETYPE_NORMAL 0
#define PPMD_LINETYPE_NODIAGS 1
/* If you set NODIAGS, all pixels drawn by ppmd_line() will be 4-connected
** instead of 8-connected; in other words, no diagonals. This is useful
** for some applications, for example when you draw many parallel lines
** and you want them to fit together without gaps.
*/
int ppmd_setlineclipping ARGS(( int clip ));
/* Normally, ppmd_line() clips to the edges of the pixmap. You can use this
** routine to disable the clipping, for example if you are using a drawproc
** that wants to do its own clipping.
*/
void ppmd_line ARGS(( pixel** pixels, int cols, int rows, pixval maxval, int x0, int y0, int x1, int y1, void (*drawprocP)(pixel**, int, int, pixval, int, int, char*), char* clientdata ));
/* Draws a line from (x0, y0) to (x1, y1).
*/
void ppmd_spline3 ARGS(( pixel** pixels, int cols, int rows, pixval maxval, int x0, int y0, int x1, int y1, int x2, int y2, void (*drawprocP)(pixel**, int, int, pixval, int, int, char*), char* clientdata ));
/* Draws a three-point spline from (x0, y0) to (x2, y2), with (x1, y1) as
** the control point. All drawing is done via ppmd_line(), so the routines
** that control it control ppmd_spline3() as well.
*/
void ppmd_polyspline ARGS(( pixel** pixels, int cols, int rows, pixval maxval, int x0, int y0, int nc, int* xc, int* yc, int x1, int y1, void (*drawprocP)(pixel**, int, int, pixval, int, int, char*), char* clientdata ));
/* Draws a bunch of splines end to end. (x0, y0) and (x1, y1) are the initial
** and final points, and the xc and yc are the intermediate control points.
** nc is the number of these control points.
*/
void ppmd_circle ARGS(( pixel** pixels, int cols, int rows, pixval maxval, int cx, int cy, int radius, void (*drawprocP)(pixel**, int, int, pixval, int, int, char*), char* clientdata ));
/* Draws a circle centered at (cx, cy) with the specified radius.
*/
/* Simple filling routines. Ok, so there's only one. */
void ppmd_filledrectangle ARGS(( pixel** pixels, int cols, int rows, pixval maxval, int x, int y, int width, int height, void (*drawprocP)(pixel**, int, int, pixval, int, int, char*), char* clientdata ));
/* Fills in the rectangle [x, y, width, height].
*/
/* Arbitrary filling routines. With these you can fill any outline that
** you can draw with the outline routines.
*/
char* ppmd_fill_init( );
/* Returns a blank fillhandle.
*/
void ppmd_fill_drawproc ARGS(( pixel** pixels, int cols, int rows, pixval maxval, int x, int y, char* clientdata ));
/* Use this drawproc to trace the outline you want filled. Be sure to use